package cn.minhx.domain.activity.model.valobj;

import cn.minhx.types.common.Constants;
import java.time.LocalDateTime;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
 * 拼团活动营销配置值对象
 *
 * @author minhx
 */
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GroupBuyActivityDiscountVO {

	/** 活动ID */
	private Long activityId;

	/** 活动名称 */
	private String activityName;

	/** 来源 */
	private String source;

	/** 渠道 */
	private String channel;

	/** 商品ID */
	private String goodsId;

	/** 折扣配置 */
	private GroupBuyDiscount groupBuyDiscount;

	/** 拼团方式（0自动成团、1达成目标拼团） */
	private Integer groupType;

	/** 拼团次数限制 */
	private Integer takeLimitCount;

	/** 拼团目标 */
	private Integer target;

	/** 拼团时长（分钟） */
	private Integer validTime;

	/** 活动状态（0创建、1生效、2过期、3废弃） */
	private Integer status;

	/** 活动开始时间 */
	private LocalDateTime startTime;

	/** 活动结束时间 */
	private LocalDateTime endTime;

	/** 人群标签规则标识 */
	private String tagId;

	/** 人群标签规则范围 */
	private String tagScope;

	/**
	 * 是否可见 1,2 代表需要过滤人群，限制可见性和参与性(一个参加活动的用户，如果不再人群范围内，既不允许看见活动，也不允许参与活动）
	 * 只配置2，那么表示通过人群的用户，能看见，但不能参与
	 */
	public boolean isVisible() {
		if (StringUtils.isBlank(this.tagScope)) {
			return TagScopeEnumVO.VISIBLE.getAllow();
		}
		String[] split = this.tagScope.split(Constants.COMMA);
		if (split.length > 0 && StringUtils.isNotBlank(split[0]) && Objects.equals(split[0], "1")) {
			return TagScopeEnumVO.VISIBLE.getRefuse();
		}
		return TagScopeEnumVO.VISIBLE.getAllow();
	}

	/**
	 * 参与限制 1,2 代表需要过滤人群，限制可见性和参与性(一个参加活动的用户，如果不再人群范围内，既不允许看见活动，也不允许参与活动）
	 * 只配置2，那么表示通过人群的用户，能看见，但不能参与
	 */
	public boolean isEnable() {
		if (StringUtils.isBlank(this.tagScope)) {
			return TagScopeEnumVO.VISIBLE.getAllow();
		}
		String[] split = this.tagScope.split(Constants.COMMA);
		if (split.length == 2 && StringUtils.isNotBlank(split[1]) && Objects.equals(split[1], "2")) {
			return TagScopeEnumVO.ENABLE.getRefuse();
		}
		return TagScopeEnumVO.ENABLE.getAllow();
	}

	@Getter
	@Builder
	@AllArgsConstructor
	@NoArgsConstructor
	public static class GroupBuyDiscount {
		/** 折扣标题 */
		private String discountName;

		/** 折扣描述 */
		private String discountDesc;

		/** 折扣类型（0:base、1:tag） */
		private DiscountTypeEnum discountType;

		/** 营销优惠计划（ZJ:直减、MJ:满减、NY:N元购、ZK:折扣） */
		private String marketPlan;

		/** 营销优惠表达式 */
		private String marketExpr;

		/** 人群标签，特定优惠限定 */
		private String tagId;
	}
}
